package com.dm.service;

import com.jacob.activeX.ActiveXComponent;

public interface DMPlugin extends WindowService {
	/**
	 * 绑定指定的窗口,并指定这个窗口的屏幕颜色获取方式,鼠标仿真模式,键盘仿真模式,以及模式设定,
	 * @param hwnd
	 * @param display
	 * 		屏幕颜色获取方式
	 * @param mouse
	 * 		鼠标仿真模式
	 * @param keypad
	 * 		键盘仿真模式
	 * @param mode
	 * @return
	 */
	long bindWindow(int hwnd,String display,String mouse,String keypad,int mode, ActiveXComponent acComponent);
	/**
	 * 禁止外部输入到指定窗口
	 * @param lock
	 * 		0关闭锁定
	       1 开启锁定(键盘鼠标都锁定)
	       2 只锁定鼠标
	       3 只锁定键盘
	 * @return
	 */
	long lockInput(int lock, ActiveXComponent acComponent);
	
	/**
	 * 设置前台鼠标在屏幕上的活动范围.
	 * @param x1
	 * 		区域的左上X坐标. 屏幕坐标.
	 * @param y1
	 * 		区域的左上Y坐标. 屏幕坐标.
	 * @param x2
	 * 		区域的右下X坐标. 屏幕坐标
	 * @param y2
	 * 		区域的右下Y坐标. 屏幕坐标.
	 * @return
	 */
	long lockMouseRect(int x1, int y1,int x2,int y2, ActiveXComponent acComponent);
	/**
	 * 解除绑定窗口,并释放系统资源.一般在OnScriptExit调用
	 * @return
	 * 		0: 失败1: 成功
	 */
	long unBindWindow(ActiveXComponent acComponent);
	/**
	 * 获取注册在系统中的dm.dll的路径.
	 * @return
	 */
	String getBasePath(ActiveXComponent acComponent);
	/**
	 * 返回当前大漠对象的ID值，这个值对于每个对象是唯一存在的。可以用来判定两个大漠对象是否一致.
	 * @return
	 */
	long getID(ActiveXComponent acComponent);
	/**
	 * 获取插件命令的最后错误
	 * @return
	 */
	long  getLastError(ActiveXComponent acComponent);
	/**
	 * 获取全局路径.(可用于调试)
	 * @return
	 */
	String getPath(ActiveXComponent acComponent);
	/**
	 * 设定图色的获取方式，默认是显示器或者后台窗口
	 * @param mode
	 * 		图色输入模式取值有以下几种
	 * @return
	 */
	long setDisplayInput(int mode, ActiveXComponent acComponent);
	/**
	 * 设置全局路径,设置了此路径后,所有接口调用中,相关的文件都相对于此路径. 比如图片,字库等.
	 * @param path
	 * @return
	 */
	long setPath(String path, ActiveXComponent acComponent);
	/**
	 * 返回当前插件版本号
	 * @return
	 */
	String ver(ActiveXComponent acComponent);
	/**
	 * 按住指定的虚拟键码
	 * @param vk_code
	 * @return
	 */
	long keyDown(int vkCode, ActiveXComponent acComponent);
	/**
	 * 按住指定的虚拟键码
	 * @param keyStr
	 * @return
	 */
	long keyDownChar(String keyStr, ActiveXComponent acComponent);
	/**
	 * 按下指定的虚拟键码,按一次
	 * @param vk_code
	 * @return
	 */
	long keyPress(int vkCode, ActiveXComponent acComponent);
	/**
	 * 按下指定的虚拟键码
	 * @param str
	 * @return
	 */
	long keyPressChar(String str, ActiveXComponent acComponent);
	/**
	 * 弹起来虚拟键vk_code
	 * @param vk_code
	 * @return
	 */
	long keyUp(int vk_code, ActiveXComponent acComponent);
	/**
	 * 弹起来虚拟键vk_code
	 * @param str
	 * @return
	 */
	long keyUpChar(String str, ActiveXComponent acComponent);
	/**
	 * 移动到制定出点击指定下。
	 * @param x
	 * @param y
	 * @param acComponent
	 * @param count
	 * @return
	 */
	long leftClick(int x,int y,ActiveXComponent acComponent,int count);
	/**
	 * 左键单击
	 * @return
	 */
	long leftClick(ActiveXComponent acComponent);
	/**
	 * 双击
	 * @return
	 */
	long leftDoubleClick(ActiveXComponent acComponent);
	/**
	 * 按住
	 * @return
	 */
	long leftDown(ActiveXComponent acComponent);
	/**
	 * 弹起
	 * @return
	 */
	long leftUp(ActiveXComponent acComponent);
	/**
	 * 鼠标相对于上次的位置移动rx,ry
	 * @param rx
	 * @param ry
	 * @return
	 */
	long moveR(int rx,int ry, ActiveXComponent acComponent);
	/**
	 * 把鼠标移动到目的点(x,y)
	 * @param x
	 * @param y
	 * @return
	 */
	long moveTo(int x,int y, ActiveXComponent acComponent);
	/**
	 * 把鼠标移动到目的范围内的任意一点
	 * @param x
	 * 		x
	 * @param y
	 * 		y
	 * @param w
	 * 		宽度
	 * @param h
	 * 		高度
	 * @return
	 */
	String moveToEx(int x,int y,int w,int h, ActiveXComponent acComponent);
	/**
	 * 
	 * @return
	 */
	long rightClick(ActiveXComponent acComponent);
	/**
	 * 
	 * @return
	 */
	long rightDown(ActiveXComponent acComponent);
	/**
	 * 
	 * @return
	 */
	long rightUp(ActiveXComponent acComponent);
	/**
	 * 
	 * @return
	 */
	long wheelDown(ActiveXComponent acComponent);
	/**
	 * 
	 * @return
	 */
	long wheelUp(ActiveXComponent acComponent);
	/**
	 * 取指定区域(x1, y1, x2, y2)的图像,保存为file(24位位图)
	 * @param x1
	 * @param y1
	 * @param x2
	 * @param y2
	 * @param file
	 * @return
	 */
	long capture(int x1, int y1, int x2,int y2,String file, ActiveXComponent acComponent);
	/**
	 * 比较指定坐标点(x,y)的颜色
	 * @param x
	 * @param y
	 * @param color
	 * @param sim
	 * @return
	 */
	long cmpColor(int x,int y,String color,double sim, ActiveXComponent acComponent);
	/**
	 * 查找指定区域内的所有颜色,颜色格式"RRGGBB-DRDGDB",注意,和按键的颜色格式相反
	 * @param x1
	 * @param y1
	 * @param x2
	 * @param y2
	 * @param color
	 * @param sim
	 * @param dir
	 * @return
	 */
	String findColorEx(int x1,int y1,int x2, int y2,String color,double sim,int  dir, ActiveXComponent acComponent);
	/**
	 * 查找指定区域内的图片,位图必须是24位色格式,支持透明色,
	 * 当图像上下左右4个顶点的颜色一样时,则这个颜色将作为透明色处理.
	 * @param x1
	 * @param y1
	 * @param x2
	 * @param y2
	 * @param pic_name
	 * @param delta_color
	 * 		颜色色偏比如"203040" 表示RGB的色偏分别是20 30 40 (这里是16进制表示)
	 * @param sim
	 * @param dir
	 * @return
	 */
	String findPicE(int x1,int y1, int x2, int y2,
			String pic_name,String delta_color,double sim,int dir, 
			ActiveXComponent acComponent);
	/**
	 * 取范围(x1,y1,x2,y2)颜色的均值,返回格式"H.S.V"
	 * @param x1
	 * @param y1
	 * @param x2
	 * @param y2
	 * @return
	 */
	String getAveHSV(int x1,int y1,int x2,int y2, ActiveXComponent acComponent);
	/**
	 * 获取范围(x1,y1,x2,y2)颜色的均值,返回格式"RRGGBB"
	 * @param x1
	 * @param y1
	 * @param x2
	 * @param y2
	 * @return
	 */
	String getAveRGB(int x1,int y1,int x2,int y2, ActiveXComponent acComponent);
	/**
	 * 获取(x,y)的颜色,颜色返回格式"RRGGBB",注意,和按键的颜色格式相反
	 * @param x
	 * @param y
	 * @return
	 */
	String getColor(int x,int y, ActiveXComponent acComponent);
	/**
	 * 判断指定的区域，在指定的时间内(秒),图像数据是否一直不变.(卡屏).
	 * @param x1
	 * @param y1
	 * @param x2
	 * @param y2
	 * @param t
	 * @return
	 * 		0 : 没有卡屏，图像数据在变化.
			1 : 卡屏. 图像数据在指定的时间内一直没有变化.
	 */
	long isDisplayDead(int x1,int y1,int x2,int y2,int t, ActiveXComponent acComponent);
	/**
	 * 在屏幕范围(x1,y1,x2,y2)内,查找string(可以是任意个字符串的组合),
	 * 并返回符合color_format的坐标位置,相似度sim同Ocr接口描述.
	 * @param x1
	 * @param y1
	 * @param x2
	 * @param y2
	 * @param string
	 * @param color_format
	 * @param sim
	 * @return
	 */
	String findStrE(int x1,int y1,int x2,int y2,String string,
			String color_format,double sim, ActiveXComponent acComponent);
	/**
	 * 在屏幕范围(x1,y1,x2,y2)内,查找string(可以是任意字符串的组合),
	 * 并返回符合color_format的所有坐标位置,相似度sim同Ocr接口描述.
	 * @param x1
	 * @param y1
	 * @param x2
	 * @param y2
	 * @param string
	 * @param color_format
	 * @param sim
	 * @return
	 */
	String findStrEx(int x1,int y1,int x2,int y2,String string,
			String color_format,double sim, ActiveXComponent acComponent);
	/**
	 * 同FindStrE  
	 * 注: 此函数比FindStrEx要快很多，尤其是在字库很大时，或者模糊识别时，效果非常明显。
			推荐使用此函数。
			另外由于此函数是只识别待查找的字符，所以可能会有如下情况出现问题。
			比如 字库中有"张和三" 一共3个字符数据，然后待识别区域里是"张和三",如果用FindStrEx查找
			"张三"肯定是找不到的，但是用FindStrFastEx却可以找到，因为"和"这个字符没有列入查找计划中
			所以，在使用此函数时，也要特别注意这一点。
	 * @param x1
	 * @param y1
	 * @param x2
	 * @param y2
	 * @param string
	 * @param color_format
	 * @param sim
	 * @return
	 */
	String findStrFastE(int x1,int y1,int x2,int y2,String string,
			String color_format,double sim, ActiveXComponent acComponent);

	/**
	 * 同FindStrEx
	 * @param x1
	 * @param y1
	 * @param x2
	 * @param y2
	 * @param string
	 * @param color_format
	 * @param sim
	 * @return
	 */
	String findStrFastEx(int x1,int y1,int x2,int y2,String string,
			String color_format,double sim, ActiveXComponent acComponent);
	/**
	 * 获取指定的字库中的字符数量.
	 * @param index
	 * @return
	 */
	long getDictCount(int index, ActiveXComponent acComponent);
	/**
	 * 获取当前使用的字库序号(0-9)
	 * @return
	 */
	long getNowDict(ActiveXComponent acComponent);
	/**
	 * 识别屏幕范围(x1,y1,x2,y2)内符合color_format的字符串,
	 * 并且相似度为sim,sim取值范围(0.1-1.0),
	 * @param x1
	 * @param y1
	 * @param x2
	 * @param y2
	 * @param color_format
	 * @param sim
	 * @return
	 */
	String ocr(int x1,int y1,int x2,int y2,String color_format,double sim, ActiveXComponent acComponent);
	/**
	 * 设置字库文件
	 * @param index
	 * 			0-9
	 * @param file
	 * @return
	 */
	int setDict(int index,String file, ActiveXComponent acComponent);
	/**
	 * 表示使用哪个字库文件进行识别(index范围:0-9)
	 * 设置之后，永久生效，除非再次设定
	 * @param index
	 * @return
	 */
	long useDict(int index, ActiveXComponent acComponent);
	/**
	 * 获取屏幕的色深. 
	 * @return
	 */
	long getScreenDepth(ActiveXComponent acComponent);

	/**
	 * 获取剪切板中的内容
	 * @param acComponent
	 * @return
	 */
	String getClipboard(ActiveXComponent acComponent);
}
